package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.entity.MenuDO;
import com.ssy.lingxi.member.merchant.model.vo.platform.request.PlatformMenuIdVO;
import com.ssy.lingxi.member.merchant.model.vo.platform.request.PlatformMenuUpdateVO;
import com.ssy.lingxi.member.merchant.model.vo.platform.request.PlatformMenuVO;
import com.ssy.lingxi.member.merchant.model.vo.platform.response.PlatformMenuDetailVO;
import com.ssy.lingxi.member.merchant.model.vo.platform.response.PlatformMenuTreeVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 平台后台 - 菜单管理相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2022-04-13
 */
public interface IPlatformMenuService {
    /**
     * 查询树形菜单列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<PlatformMenuTreeVO>> treeMenus(HttpHeaders headers);

    /**
     * 查询菜单详情
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<PlatformMenuDetailVO> findMenu(HttpHeaders headers, PlatformMenuIdVO idVO);

    /**
     * 新增菜单
     * @param headers Http头部信息
     * @param menuVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> addMenu(HttpHeaders headers, PlatformMenuVO menuVO);

    /**
     * 修改菜单
     * @param headers Http头部信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMenu(HttpHeaders headers, PlatformMenuUpdateVO updateVO);

    /**
     * 删除菜单
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteMenu(HttpHeaders headers, PlatformMenuIdVO idVO);

    /**
     * 将菜单列表递归转换为树形菜单
     * @param menus 菜单列表
     * @return 转换结果
     */
    List<PlatformMenuTreeVO> transferToTree(List<MenuDO> menus);
}
